#pragma once
#include <queue>
#include <pthread.h>

using namespace std;
using callback = void (*)(void* arg);

//任务结构体
struct Task{

    Task(){
        function = nullptr;
        arg = nullptr;
    }
    Task(callback f,void* arg){
        function = f;
        this->arg = arg;
    }

    //void (*function)(void* arg);
    callback function;
    void* arg;

};

//任务队列
class TaskQueue{
public:
    TaskQueue();
    ~TaskQueue();

    //添加任务
    void addTask(Task task);
    void addTask(callback f,void* arg);
    //取出一个任务
    Task getTask();
    //获取当前任务的个数
    inline int taskNumber(){   //内联函数的特点是会直接进行代码块的替换,而不会进行压栈,直接替换比压栈效率更高
        return m_taskQ.size();
    }
private:
    queue<Task> m_taskQ;
    pthread_mutex_t m_mutex;    //互斥锁
};